﻿////------------------------------------------------------------
//// All Rights Reserved , Copyright (C) 2010 , Jirisoft , Ltd. 
////------------------------------------------------------------

//using System;
//using System.Collections.Generic;
//using System.Data;
//using System.Data.Common;
//using System.Data.OleDb;

//namespace NetCore.Ado
//{

	
//    public class OleDb : AbstractDatabase, IDbAccess
//    {
//        public override DbProviderFactory DbFactory
//        {
//            get
//            {
//                return OleDbFactory.Instance;
//            }
//        }
//        //public override DbProviderFactory GetInstance()
//        //{
//        //    return OleDbFactory.Instance;
//        //}

//        /// <summary>
//        /// 当前数据库类型
//        /// </summary>
//        public override ProviderType CurrentProviderType
//        {
//            get
//            {
//                return ProviderType.Access;
//            }
//        }
     
//        #region public OleDb()
//        /// <summary>
//        /// 构造方法
//        /// </summary>
//        public OleDb()
//		{
//            FileName = "OleDb.txt";   // sql查询句日志
//		}
//		#endregion

//        #region public OleDb(string connectionString)
//        /// <summary>
//		/// 设定软件名称
//		/// </summary>
//        /// <param name="connectionString">数据连接</param>
//        public OleDb(string connectionString) : this()
//		{
//            this.ConnectionString = connectionString;
//		}
//		#endregion

//        #region public string GetDBNow()
//        /// <summary>
//        /// 获得数据库日期时间
//        /// </summary>
//        /// <returns>日期时间</returns>
//        public string GetDBNow()
//        {
//            string returnValue = " Getdate() ";
//            switch (this.CurrentProviderType)
//            {
//                case ProviderType.Access:
//                    returnValue = "'" + DateTime.Now.ToString() + "'";
//                    break;
//                case ProviderType.MsSql:
//                    returnValue = " GetDate() ";
//                    break;
//                case ProviderType.Oracle:
//                    returnValue = " SYSDATE ";
//                    break;
//                case ProviderType.MySQL:
//                    returnValue = " NOW() ";
//                    break;
//            }
//            return returnValue;
//        }
//        #endregion

//        #region public string GetDBDateTime()
//        /// <summary>
//        /// 获得数据库日期时间
//        /// </summary>
//        /// <returns>日期时间</returns>
//        public string GetDBDateTime()
//        {
//            string commandText = " SELECT " + this.GetDBNow();
//            if (this.CurrentProviderType.Equals(ProviderType.Oracle))
//            {
//                commandText += " FROM DUAL ";
//            }
//            this.Open();
//            string dateTime = this.ExecuteScalar(CommandType.Text, commandText, new DbParameter[0]).ToString();
//            this.Close();
//            return dateTime;
//        }
//        #endregion


//        #region public string SqlSafe(string value) 检查参数的安全性
//        /// <summary>
//        /// 检查参数的安全性
//        /// </summary>
//        /// <param name="value">参数</param>
//        /// <returns>安全的参数</returns>
//        public string SqlSafe(string value)
//        {
//            value = value.Replace("'", "''");
//            // value = value.Replace("%", "'%");
//            return value;
//        }
//        #endregion

//        #region public DbParameter MakeInParam(string targetFiled, object targetValue)
//        /// <summary>
//        /// 获取参数
//        /// </summary>
//        /// <param name="targetFiled">目标字段</param>
//        /// <param name="targetValue">值</param>
//        /// <returns>参数</returns>
//        public DbParameter MakeInParam(string targetFiled, object targetValue)
//        {
//            return new OleDbParameter(targetFiled, targetValue);
//        }
//        #endregion

//        #region public DbParameter[] MakeParameters(string targetFiled, object targetValue)
//        /// <summary>
//        /// 获取参数
//        /// </summary>
//        /// <param name="targetFiled">目标字段</param>
//        /// <param name="targetValue">值</param>
//        /// <returns>参数集</returns>
//        public DbParameter[] MakeParameters(string targetFiled, object targetValue)
//        {
//            DbParameter[] dbParameters = null;
//            if (targetFiled != null && targetValue != null)
//            {
//                dbParameters = new DbParameter[1];
//                dbParameters[0] = this.MakeInParam(targetFiled, targetValue);
//            }
//            return dbParameters;
//        }
//        #endregion

//        #region public DbParameter[] MakeParameters(string[] targetFileds, Object[] targetValues)
//        /// <summary>
//        /// 获取参数
//        /// </summary>
//        /// <param name="targetFiled">目标字段</param>
//        /// <param name="targetValue">值</param>
//        /// <returns>参数集</returns>
//        public DbParameter[] MakeParameters(string[] targetFileds, Object[] targetValues)
//        {
//            DbParameter[] dbParameters = new DbParameter[0];
//            if (targetFileds != null && targetValues != null)
//            {
//                dbParameters = new DbParameter[targetFileds.Length];
//                for (int i = 0; i < targetFileds.Length; i++)
//                {
//                    if (targetFileds[i] != null && targetValues[i] != null)
//                    {
//                        dbParameters[i] = this.MakeInParam(targetFileds[i], targetValues[i]);
//                    }
//                }
//            }
//            return dbParameters;
//        }
//        #endregion

//        public DbParameter MakeOutParam(string paramName, DbType dbType, int Size)
//        {
//            return MakeParam(paramName, dbType, Size, ParameterDirection.Output, null);
//        }

//        public DbParameter MakeInParam(string paramName, DbType dbType, int Size, object Value)
//        {
//            return MakeParam(paramName, dbType, Size, ParameterDirection.Input, Value);
//        }

//        public DbParameter MakeParam(string paramName, DbType dbType, Int32 Size, ParameterDirection direction, object paramValue)
//        {
//            OleDbParameter param;

//            if (Size > 0)
//            {
//                param = new OleDbParameter(paramName, (OleDbType)dbType, Size);
//            }
//            else
//            {
//                param = new OleDbParameter(paramName, (OleDbType)dbType);
//            }

//            param.Direction = direction;
//            if (!(direction == ParameterDirection.Output && paramValue == null))
//                param.Value = paramValue;

//            return param;
//        }


//        #region public string GetParameter(string parameter) 获得参数Sql表达式
//        /// <summary>
//        /// 获得参数Sql表达式
//        /// </summary>
//        /// <param name="parameter">参数名称</param>
//        /// <returns>字符串</returns>
//        public override string GetParameter(string parameter)
//        {
//            return " ? ";
//        }
//        #endregion

//        #region string PlusSign(params string[] values)
//        /// <summary>
//        ///  获得Sql字符串相加符号
//        /// </summary>
//        /// <param name="values">参数值</param>
//        /// <returns>字符加</returns>
//        public string PlusSign(params string[] values)
//        {
//            string returnValue = string.Empty;
//            switch (this.CurrentProviderType)
//            {
//                case ProviderType.Access:
//                case ProviderType.MsSql:
//                    if (!String.IsNullOrEmpty(returnValue))
//                    {
//                        returnValue = returnValue.Substring(0, returnValue.Length - 3);
//                    }
//                    else
//                    {
//                        returnValue = " + ";
//                    }
//                    break;
//                case ProviderType.MySQL:
//                    returnValue = " CONCAT(";
//                    for (int i = 0; i < values.Length; i++)
//                    {
//                        returnValue += values[i] + " ,";
//                    }
//                    returnValue = returnValue.Substring(0, returnValue.Length - 2);
//                    returnValue += ")";
//                    break;
//                case ProviderType.Oracle:
//                    for (int i = 0; i < values.Length; i++)
//                    {
//                        returnValue += values[i] + " || ";
//                    }
//                    if (!String.IsNullOrEmpty(returnValue))
//                    {
//                        returnValue = returnValue.Substring(0, returnValue.Length - 4);
//                    }
//                    else
//                    {
//                        returnValue = " || ";
//                    }
//                    break;
//            }
//            return returnValue;
//        }
//        #endregion

//        #region public string PlusSign() 字符串相加符号
//        /// <summary>
//        /// 字符串相加符号
//        /// </summary>
//        /// <returns>字符加</returns>
//        public string PlusSign()
//        {
//            string returnValue = " + ";
            
//            return returnValue;
//        }
//        #endregion

//        #region
//        public override DbConnection GetConnection(string connectionString)
//        {
//            return new OleDbConnection(connectionString);
//        }

//        public override DbDataAdapter GetDataAdapter()
//        {
//            return new OleDbDataAdapter();
//        }
//        public override int SelectIdentity(string tableName)
//        {
//            object resultValue = base.ExecuteScalar(CommandType.Text, "select @@IDENTITY", null);
//            return resultValue.ToInt();
//        }
//        public override DateTime Now()
//        {
//            object obj = base.ExecuteScalar("select getdate()");
//            return ConvertHelper.ToDateTime(obj);
//        }

//        public override DbParameter[] GetParameter(List<DataParameter> parameters)
//        {
//            if (parameters != null && parameters.Count > 0)
//            {
//                DbParameter[] parameter = new DbParameter[parameters.Count];
//                var index = 0;
//                foreach (var item in parameters)
//                {
//                    parameter[index] = this.MakeParam(item.ParameterName, item.DbType, item.Size, item.Direction, item.Value);
//                    index++;

//                }
//                return parameter;
//            }
//            return null;
//        }

//        public override DbParameter GetParameter(string name, object value)
//        {
//            return this.MakeInParam(name, value);
//        }
//        public override string Identity(string where)
//        {
//            return "select @@IDENTITY;";
//        }
//        #endregion

//        public override void SqlBulkCopyData(DataTable dataTable)
//        {

//        }
//    }
//}